package threading;

// 构造方法重载的限制
// 工厂方法

// 这个类表示平面上的点
class Point {
    /*// 通过笛卡尔坐标系来进行构造
    public Point(double x, double y) {

    }

    // 通过极坐标来进行构造，r表示半径，a表示角度
    public Point(double x, double y) {

    }*/

    // 此时就会发现：这两个构造方法是无法重载的！
    // 解决这个问题，就可以使用普通方法来代替构造方法； 使用普通方法在里面构造出Point对象，再通过一些其他手段进行设置

    // 使用普通方法进行修改
    // 也就是【工厂方法】
    public static Point makePointByXY(double x, double y) {
        Point p = new Point();
        p.setX(x);
        p.setY(y);
        return p;
    }

    private void setY(double y) {
    }

    private void setX(double x) {
    }

    // 类似地
    public static Point makePointByRA(double r, double a) {
        Point p = new Point();
        p.setR(r);
        p.setA(a);
        return p;
    }

    private void setA(double a) {
    }

    private void setR(double r) {
    }
}

public class Example {
    public static void main(String[] args) {
        // 此时创建实例就直接调用普通方法就行
        Point p1 = Point.makePointByXY(10,20);
        Point p2 = Point.makePointByRA(5,30);
    }
}
